package orderoid.formulaire;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutionException;

import orderoid.singleton.SingletonCommande;
import orderoid.singleton.SingletonRestaurant;
import orderoid.soap.Tool.MyListAdapterMenu;
import orderoid.soap.business.webRechercherIdMenuFromRestauAndMenuName;
import orderoid.soap.business.webRechercherMenuFromRestau;
import orderoid.soap.classeCommune.Menu;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class OrderoidListeMenuActivity extends Activity
{
	private ListView		listMenu;
	private List<String>	listMenuValider;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		listMenuValider = new ArrayList<String>();

		setContentView(R.layout.liste_menu);

		// récupération de la variable via Singleton
		String idRestaurant = Integer.toString(SingletonRestaurant.getInstance().getRestaurant().getIdRestaurant());

		// Recuperation de la listview creee dans le fichier main.xml
		listMenu = (ListView) findViewById(R.id.listMenu);

		// Creation de la ArrayList qui nous permettra de remplire la listView
		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();

		List<Menu> menus = initMenus(idRestaurant);

		// On declare la HashMap qui contiendra les informations pour un item
		HashMap<String, String> map;

		for (Menu m : menus)
		{
			map = new HashMap<String, String>();

			// on recupere toute les informations qui nous interessent dans une hash map
			map.put("titreMenu", m.getNom());
			map.put("prix_menu", Double.toString(m.getMontant()));
			if (m.getPromotion() != null)
			{
				map.put("promotion", Double.toString(m.getPromotion()));
			}
			// que l'on stocke dans une array list d'affichage
			listItem.add(map);
		}

		// Creation d'un SimpleAdapter qui se chargera de mettre les items
		// present dans notre list (listItem) dans la vue affichageitem
		MyListAdapterMenu mSchedule = new MyListAdapterMenu(this.getBaseContext(), listItem, R.layout.affichage_menu, new String[] { "titreMenu","prix_menu","promotion"},
				new int[] { R.id.titreMenu, R.id.prix_menu, R.id.descriptionMenu });

		// On attribut a notre listView l'adapter que l'on vient de creer
		listMenu.setAdapter(mSchedule);
	}

	private List<Menu> initMenus(String idRestaurant)
	{
		List<Menu> menus = new ArrayList<Menu>();

		webRechercherMenuFromRestau ws = new webRechercherMenuFromRestau();

		try
		{
			menus = ws.execute(idRestaurant).get();
		} catch (InterruptedException e)
		{
			menus = null;
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			e.printStackTrace();
			menus = null;
		}
		return menus;
	}

	public void retourAccueil(View view)
	{
		Intent accueil = new Intent(this, OrderoidMainActivity.class);
		// lance la fenetre precedente
		startActivity(accueil);
	}

	public void voirPanier(View view)
	{
		Intent pannier = new Intent(this, OrderoidValidationPanierActivity.class);
		// lance la fenetre suivante
		startActivity(pannier);
	}

	// Fonction appelée au clic d'une des checkbox
	public void MyHandler(View v)
	{
		CheckBox cb = (CheckBox) v;
		// on récupère la position à l'aide du tag défini dans la classe MyListAdapter
		int position = Integer.parseInt(cb.getTag().toString());

		// On récupère l'élément sur lequel on va changer la couleur
		View o = listMenu.getChildAt(position).findViewById(R.id.GridLayoutMenu);
		// et recuperé la valeur
		TextView prodName = (TextView) listMenu.getChildAt(position).findViewById(R.id.titreMenu);
		// On change la couleur
		if (cb.isChecked())
		{
			o.setBackgroundResource(R.color.green);
			listMenuValider.add(prodName.getText().toString());
		}
		else
		{
			listMenuValider.remove(prodName.getText().toString());
			o.setBackgroundResource(R.color.blue);
		}
	}

	public void validerMenu(View view)
	{
		Intent pannier = new Intent(this, OrderoidValidationPanierActivity.class);

		// initialisation checkbox
//		CheckBox checkBoxMenu = (CheckBox) findViewById(R.id.checkBoxMenu);

		webRechercherIdMenuFromRestauAndMenuName ws = new webRechercherIdMenuFromRestauAndMenuName();
		String idRestaurant = Integer.toString(SingletonRestaurant.getInstance().getRestaurant().getIdRestaurant());

		// on transfert la liste d'objets produit dans notre singleton de commande
		// suite a un souci de comprehension du mode de fonctionnement de String... une méthode plsu abrute a été conservé
		String concatenationDeCommande = new String();
		for (String produit : listMenuValider)
		{
			concatenationDeCommande += ";;" + produit;
		}

		try
		{
			SingletonCommande.getInstance().getCommande().setListMenu(ws.execute(idRestaurant, concatenationDeCommande).get());
		} catch (InterruptedException e)
		{
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			e.printStackTrace();
		}

		// lance la fenetre suivante
		startActivity(pannier);
	}

}